package presentacion;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.AbstractTableModel;

import logica.Aplicacion;
import logica.UsuarioRegistrado;
import dominio.Controlador;

@SuppressWarnings("serial")
public class ConsultaUsuariosRegistradosJDialog extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private JTable table;

	/**
	 * Create the dialog.
	 */
	public ConsultaUsuariosRegistradosJDialog(JFrame frame) {
		super(frame);
		setTitle("Usuarios Registrados");
		setBounds(100, 100, 650, 260);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(0, 0, 0, 0));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new CardLayout(0, 0));
		{
			table = new JTable();
		}
		{
			JScrollPane scrollPane = new JScrollPane(table);
			contentPanel.add(scrollPane, "name_7262781342600");
		}
		this.setLocationRelativeTo(null);
	}

	// Se invoca desde fuera
	public void cargaUsuariosRegistrados(Controlador c) {
		try {

			ArrayList<UsuarioRegistrado> listaUsuariosRegistrados = (ArrayList<UsuarioRegistrado>) c
					.encontrarUsuariosRegistrados();
			Iterator<UsuarioRegistrado> it = listaUsuariosRegistrados.iterator();

			UsuarioRegistrado ur;
			UsuarioRegistradoTableModel modelo = new UsuarioRegistradoTableModel();
			table.setModel(modelo);
			modelo.clear();

			while (it.hasNext()) {
				ur = it.next();
				modelo.addRow(ur);
			}

		} catch (Exception e) {
			if (Aplicacion.DEBUG) {
				e.printStackTrace();
			}
			JOptionPane.showMessageDialog(this, e.getMessage(), "ERROR", JOptionPane.ERROR_MESSAGE);
		}
	}

	// ****************************************************************************
	// Clase interna para del Modelo de la tabla
	// ****************************************************************************
	class UsuarioRegistradoTableModel extends AbstractTableModel {

		private static final long serialVersionUID = 1L;

		// Columnas de la tabla
		private final String[] columnNames = { "Nif", "Nombre", "Apellidos", "Usuario", "Password", "Email",
				"Intereses", "Alertado", "Edita Area" };

		// Datos que muestra la tabla
		private final ArrayList<UsuarioRegistrado> data = new ArrayList<UsuarioRegistrado>();

		@Override
		public int getColumnCount() {
			return columnNames.length;
		}

		@Override
		public int getRowCount() {
			return data.size();
		}

		@Override
		public String getColumnName(int col) {
			return columnNames[col];
		}

		// Este m�todo se dispara cada vez que la tablanecesita el valor de un
		// campo
		@Override
		public Object getValueAt(int row, int col) {
			UsuarioRegistrado ur = data.get(row);
			switch (col) {
			case 0:
				return ur.getNif();
			case 1:
				return ur.getNombre();
			case 2:
				return ur.getApellidos();
			case 3:
				return ur.getNombreUsuario();
			case 4:
				return ur.getContrasenya();
			case 5:
				return ur.getEmail();
			case 6:
				return ur.getAreasInteres();
			case 7:
				return ur.getAlertado();
			case 8:
				return (ur.getAreaEditada() != null) ? ur.getAreaEditada().getNombre() : "Ninguna";
			default:
				return null;
			}
		}

		public void clear() {
			data.clear();
		}

		@Override
		public Class<? extends Object> getColumnClass(int c) {
			return getValueAt(0, c).getClass();
		}

		public void addRow(UsuarioRegistrado row) {
			data.add(row);
			this.fireTableDataChanged();
		}

		public void delRow(int row) {
			data.remove(row);
			this.fireTableDataChanged();
		}
	}

}
